#include <p32xxxx.h>
#include <plib.h>
#include<lega-c/proc/p32mx220f032b.h>

// Configuracion de bits
#pragma config FNOSC = FRCPLL       // oscilador interno de 8MHz (PLL)
#pragma config FPLLIDIV = DIV_2     // 4MHz producto de la divicion del PLL
#pragma config FPLLMUL = MUL_20     // multiplicador del PLL (80MHZ)
#pragma config FPLLODIV = DIV_2     // Divide el multimplicador (40 MHz)
#pragma config FWDTEN = OFF         // desactivar el timer guardian
#pragma config ICESEL = ICS_PGx1    // comando de seleccion de canal
#pragma config JTAGEN = OFF         // desactivar JTAG
#pragma config FSOSCEN = OFF        // desactivar el oscilador secundario
#pragma config FPBDIV = DIV_1       // PBCLK = SYCLK
#define SYS_FREQ (40000000L)            // se fefine el oscilador
void delay_us( unsigned t)         //se hara un retardo en microsegundosll
{
    T1CON = 0x8000;               // enciende el Timer1, fuente PBCLK, 1:1 prescaler
 
    // delay 100us para un tiempo menor a 100us 
    while( t >= 100)
    {
        t-=100;
        TMR1 = 0;
        while( TMR1 < SYS_FREQ/10000); // espera 100us
    }
 
    // delay 10us para un tiempo menor a 10us 
    while( t >= 10)
    {
        t-=10;
        TMR1 = 0;
        while( TMR1 < SYS_FREQ/100000); // espera 10us
    }
 
    // delay 1us para un tiempo ultimo
    while( t > 0)
    {
        t--;
        TMR1 = 0;
        while( TMR1 < SYS_FREQ/1000000); // espera 1us
    }
 
    // desactiva el Timer1
    T1CONCLR = 0x8000;
}
//fin de la funcion delay us
unsigned char mide_distancia(void)//Funcion sensor
{
     int centimetros;
    //Pulso de disparo
    PORTAbits.RA1=1;//Pin TRIG
    delay_us(10);//Tiempo mayor a 10 micro segundos
    PORTAbits.RA1=0;
    delay_us(10);//Tiempo mayor a 10 micro segundos

    while(PORTAbits.RA2==1)//Pin ECHO
    {
        centimetros++;
        delay_us(2);//Espera de 58 micro segundos tiempo en que tarda en viada el sonido 2cm.
    }
    delay_us(5);
    return(centimetros+5);
} //fin senso r
void main(void){
    int a;
    TRISA=0xf0;
    AD1CON1=15;
    AD1CON2=128;
    //Sensor de ultrasonido
    TRISAbits.TRISA1=0;//Declarado como salida-TRIG
    TRISAbits.TRISA2=1;//Declarado como entrada-ECHO
    while(1){
    a=mide_distancia();
    if(a<10){
    PORTAbits.RA0=1;
    }
    else PORTAbits.RA0=0;
    }

}